#ifndef DIALOG_H
#define DIALOG_H

#include "Updater.h"
#include "Loader.h"

#include <QDialog>

namespace Ui {
class Dialog;
}

class Dialog : public QDialog
{
    Q_OBJECT

public:
    explicit Dialog(int argc, char *argv[], QWidget *parent = nullptr);
    virtual ~Dialog();

public:
    //1.读取配置文件UpdaterConfig.json,包括:升级地址,升级完毕后运行的程序路径
    //m_strUpdateJsonURL,ShowProgress,m_listExecutablePrograms,m_listDynamicLibs
    int loadUpdaterConfig();

    //显示信息
    void showMessage(QString msg);

    //升级出错
    void updateError(QString msg);

    //开始升级
    bool startUpdate()
    {
        return m_Updater.startUpdate(m_strUpdateJsonURL);
    }

protected:
    //运行文件，这里必须用事件的方式调用，因为要close（事件）此Dialog后再运行外部程序
    Q_INVOKABLE void RunFiles();

private:
    Ui::Dialog *ui;


    //是否显示进度
    //按位显示；第1位：升级过程是否显示；第2位：出错是否显示；第3位：成功是否显示
    //一般联网游戏的话，手机用0b000，PC用0b011
    //单机游戏：手机用0b000，PC用0b001
    int m_nShowProgress;

    //升级出错是否使用Loader加载程序（适合单机）
    bool m_bForceRun;

    //升级文件json的URKL
    QString m_strUpdateJsonURL;

    //升级完毕后执行的程序
    QVariantList m_listExecutablePrograms;
    QVariantList m_listDynamicLibs;
    //QString m_strExecutableProgram;
    //QStringList m_strProgramArguments;


#if defined(Q_OS_ANDROID)   //android
    //要从assets拷贝的程序
    QVariantList m_listCopyFiles;
#endif


    //两个对象
    Updater m_Updater;

    Loader m_Loader;

};

#endif // DIALOG_H
